// pages/music-library/music-library.js
const api = require('../../utils/api')

Page({
  data: {
    musicList: [],
    loading: false,
    currentPlayingId: null,
    audioContext: null
  },

  onLoad() {
    console.log('音乐库页面初始化')
    this.loadMusicLibrary()
    
    // 创建音频上下文
    this.data.audioContext = wx.createInnerAudioContext()
    
    // 监听音频播放结束
    this.data.audioContext.onEnded(() => {
      this.setData({
        currentPlayingId: null
      })
    })
    
    // 监听音频播放错误
    this.data.audioContext.onError((err) => {
      console.error('音频播放错误:', err)
      wx.showToast({
        title: '播放失败',
        icon: 'none'
      })
      this.setData({
        currentPlayingId: null
      })
    })
  },

  onUnload() {
    // 页面卸载时销毁音频上下文
    if (this.data.audioContext) {
      this.data.audioContext.destroy()
    }
  },

  /**
   * 加载音乐库
   * 验证需求: 3.4
   */
  async loadMusicLibrary() {
    this.setData({ loading: true })
    
    try {
      const result = await api.getMusicLibrary()
      
      // 格式化音乐数据
      const musicList = result.music.map(music => {
        return {
          ...music,
          formattedDuration: this.formatDuration(music.duration),
          formattedDate: this.formatDate(music.created_at),
          locationInfo: this.getLocationInfo(music.metadata)
        }
      })
      
      this.setData({
        musicList: musicList,
        loading: false
      })
      
    } catch (error) {
      console.error('加载音乐库失败:', error)
      wx.showToast({
        title: '加载失败',
        icon: 'none'
      })
      this.setData({ loading: false })
    }
  },

  /**
   * 播放/暂停音乐
   * 验证需求: 3.4
   */
  togglePlay(e) {
    const musicId = e.currentTarget.dataset.id
    const fileUrl = e.currentTarget.dataset.url
    
    if (this.data.currentPlayingId === musicId) {
      // 暂停当前播放
      this.data.audioContext.pause()
      this.setData({
        currentPlayingId: null
      })
    } else {
      // 播放新音乐
      this.data.audioContext.src = fileUrl
      this.data.audioContext.play()
      this.setData({
        currentPlayingId: musicId
      })
    }
  },

  /**
   * 删除音乐
   * 验证需求: 3.4
   */
  deleteMusic(e) {
    const musicId = e.currentTarget.dataset.id
    const musicName = e.currentTarget.dataset.name
    
    wx.showModal({
      title: '确认删除',
      content: `确定要删除音乐"${musicName}"吗？`,
      success: (res) => {
        if (res.confirm) {
          this.performDelete(musicId)
        }
      }
    })
  },

  /**
   * 执行删除操作
   */
  async performDelete(musicId) {
    try {
      // 如果正在播放该音乐，先停止
      if (this.data.currentPlayingId === musicId) {
        this.data.audioContext.stop()
        this.setData({
          currentPlayingId: null
        })
      }
      
      // 调用后端API删除音乐
      await api.deleteMusic(musicId)
      
      // 从列表中移除
      const musicList = this.data.musicList.filter(music => music.id !== musicId)
      this.setData({ musicList })
      
      wx.showToast({
        title: '删除成功',
        icon: 'success'
      })
      
    } catch (error) {
      console.error('删除音乐失败:', error)
      wx.showToast({
        title: '删除失败',
        icon: 'none'
      })
      // 重新加载列表
      this.loadMusicLibrary()
    }
  },

  /**
   * 分享音乐
   * 验证需求: 3.4
   */
  shareMusic(e) {
    const musicId = e.currentTarget.dataset.id
    const musicName = e.currentTarget.dataset.name
    
    // 微信小程序分享功能
    wx.showShareMenu({
      withShareTicket: true,
      menus: ['shareAppMessage', 'shareTimeline']
    })
    
    // 设置分享信息
    this.setData({
      shareInfo: {
        title: `分享音乐: ${musicName}`,
        path: `/pages/music-library/music-library?musicId=${musicId}`,
        imageUrl: '' // 可以设置分享图片
      }
    })
    
    wx.showToast({
      title: '点击右上角分享',
      icon: 'none'
    })
  },

  /**
   * 分享到朋友圈
   */
  onShareAppMessage() {
    if (this.data.shareInfo) {
      return this.data.shareInfo
    }
    return {
      title: '步语 - 我的音乐库',
      path: '/pages/music-library/music-library'
    }
  },

  /**
   * 分享到朋友圈
   */
  onShareTimeline() {
    return {
      title: '步语 - 我的音乐库'
    }
  },

  /**
   * 格式化时长
   */
  formatDuration(seconds) {
    if (!seconds) return '00:00'
    const mins = Math.floor(seconds / 60)
    const secs = seconds % 60
    return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`
  },

  /**
   * 格式化日期
   */
  formatDate(dateString) {
    if (!dateString) return ''
    const date = new Date(dateString)
    const year = date.getFullYear()
    const month = (date.getMonth() + 1).toString().padStart(2, '0')
    const day = date.getDate().toString().padStart(2, '0')
    return `${year}-${month}-${day}`
  },

  /**
   * 获取位置信息
   * 验证需求: 3.5 - 显示音乐元数据
   */
  getLocationInfo(metadata) {
    if (!metadata) return '未知地点'
    
    // 从元数据中提取位置信息
    if (metadata.poi_name) {
      return metadata.poi_name
    }
    
    if (metadata.location) {
      return `${metadata.location.latitude.toFixed(4)}, ${metadata.location.longitude.toFixed(4)}`
    }
    
    return '未知地点'
  },

  /**
   * 下拉刷新
   */
  onPullDownRefresh() {
    this.loadMusicLibrary().then(() => {
      wx.stopPullDownRefresh()
    })
  }
})
